package com.zenithmind.chat.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zenithmind.chat.pojo.entity.ChatFriend;
import com.zenithmind.chat.pojo.vo.ChatFriendVO;
import com.zenithmind.common.result.PageResult;

import java.util.List;
// import com.zenithmind.chat.service.friend.ChatFriendQueryService;
// import com.zenithmind.chat.service.friend.ChatFriendManagementService;
// import com.zenithmind.chat.service.friend.ChatFriendSettingService;

/**
 * 好友关系服务接口 - 重构为组合模式
 * 整合查询、管理、设置三个服务的功能
 *
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface ChatFriendService extends IService<ChatFriend> {

    /**
     * 获取用户好友列表
     */
    List<ChatFriendVO> getUserFriends(String userId, String keyword, Integer status);

    /**
     * 根据用户ID获取好友信息
     */
    ChatFriendVO getFriendByUserId(String userId, String friendId);

    /**
     * 统计好友数量
     */
    Integer countFriends(String userId, Integer status);

    /**
     * 分页查询好友列表
     *
     * @param userId 用户ID
     * @param keyword 搜索关键词
     * @param status 好友状态
     * @param pageNum 页码
     * @param pageSize 页大小
     * @return 好友分页列表
     */
    PageResult<ChatFriendVO> getFriendPage(String userId, String keyword, Integer status, Integer pageNum, Integer pageSize);

    /**
     * 根据好友ID获取好友信息
     *
     * @param friendId 好友ID
     * @param userId 用户ID
     * @return 好友信息
     */
    ChatFriendVO getFriendById(String friendId, String userId);

    /**
     * 删除好友
     *
     * @param friendId 好友ID
     * @param userId 用户ID
     * @return 删除结果
     */
    Boolean deleteFriend(String friendId, String userId);

    /**
     * 更新好友备注
     *
     * @param friendId 好友ID
     * @param remark 备注
     * @param userId 用户ID
     * @return 更新结果
     */
    Boolean updateFriendRemark(String friendId, String remark, String userId);

    /**
     * 更新好友状态
     *
     * @param friendId 好友ID
     * @param status 状态
     * @param userId 用户ID
     * @return 更新结果
     */
    Boolean updateFriendStatus(String friendId, Integer status, String userId);

    /**
     * 批量删除好友
     *
     * @param friendIds 好友ID列表
     * @param userId 用户ID
     * @return 删除结果
     */
    Boolean batchDeleteFriends(List<String> friendIds, String userId);

    /**
     * 检查好友关系
     *
     * @param userId 用户ID
     * @param targetUserId 目标用户ID
     * @return 是否为好友
     */
    Boolean checkFriendship(String userId, String targetUserId);

    /**
     * 获取共同好友
     *
     * @param userId 用户ID
     * @param targetUserId 目标用户ID
     * @return 共同好友列表
     */
    List<ChatFriendVO> getMutualFriends(String userId, String targetUserId);
}
